﻿#include <stdint.h>

// 功能：检验消息的奇偶校验（假设msg中最后一位为校验位，奇校验）
// 参数：msg-消息数组（0表示0，非0表示1），msg_length-消息长度（含校验位）
// 返回值：1-校验通过，0-校验失败
int parity_check(const unsigned char* msg, const int msg_length) {
    if (msg == NULL || msg_length <= 1) {
        return 0; // 消息为空或长度不足（需至少1个数据位+1个校验位）
    }
    int count = 0;
    // 统计数据位中1的个数（前msg_length-1位）
    for (int i = 0; i < msg_length - 1; i++) {
        if (msg[i] != 0) {
            count++;
        }
    }
    // 奇校验：数据位1的个数为奇数时，校验位应为1；偶数时应为0
    unsigned char expected_parity = (count % 2 == 1) ? 1 : 0;
    unsigned char actual_parity = (msg[msg_length - 1] != 0) ? 1 : 0;
    return (expected_parity == actual_parity) ? 1 : 0;
}